﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Capa_Negocio;
using System.Data;
using System.Data.Entity;
using Capa_Datos;
using System.Data.Objects;


namespace Capa_Negocio
{
    public class UsuarioCN
    {//los metodos devuelven el nº de registros afectados
       
        #region Operaciones de mantenimiento
        #endregion
        public int AltaUsuario(usuario oUsuario)
        {
            using (ProyectoCIFP oCon = new ProyectoCIFP())
            {//a la hora de dar un alta habrá que seleccionar a que familia pertenece
                oCon.AddTousuario(oUsuario);
                return oCon.SaveChanges();
            }
        }
        public int BajaUsuario(usuario oUsuario)
        {
            using (ProyectoCIFP oCon = new ProyectoCIFP())
            {//No podemos Borrar usuarios que hayan hecho pedido ¿desactivar?
                usuario borrado = (from u in oCon.usuario where u.id_usuario == oUsuario.id_usuario select u).First();
                oCon.DeleteObject(borrado);
                return oCon.SaveChanges();
            }
        }
        public int ModiUsuario(usuario oUsuario)
        {
            using (ProyectoCIFP oCon = new ProyectoCIFP())
            {
                usuario modificado = (from u in oCon.usuario where u.id_usuario == oUsuario.id_usuario select u).First();
                modificado.nombre = oUsuario.nombre;
                modificado.apellido = oUsuario.apellido;
                modificado.loginn = oUsuario.loginn;
                modificado.pass = oUsuario.pass;
                modificado.rol = oUsuario.rol;
                return oCon.SaveChanges();
            }
        }
        #region Operaciones de filtrado
        public List<usuario> General(usuario oUsuario)
        {
            using (ProyectoCIFP oCon = new ProyectoCIFP())
            {
                //Cremos tantos iQueriable como campos + 1 para el general
                IQueryable<usuario> general = from u in oCon.usuario select u;
                //vamos preguntando si el objeto usuario tiene campos rellenos por los que filtrar
                if (oUsuario.id_usuario != 0)
                {
                    IQueryable<usuario> id = from u in oCon.usuario where u.id_usuario == oUsuario.id_usuario select u;
                    general = general.Intersect(id);
                }
                if (oUsuario.nombre != "")
                {
                    IQueryable<usuario> nom = from u in oCon.usuario where u.nombre.Contains(oUsuario.nombre) select u;
                    general = general.Intersect(nom);
                }
                if (oUsuario.apellido != "")
                {
                    IQueryable<usuario> ape = from u in oCon.usuario where u.apellido.Contains(oUsuario.apellido) select u;
                    general = general.Intersect(ape);
                }
                if (oUsuario.loginn != "")
                {
                    IQueryable<usuario> log = from u in oCon.usuario where u.loginn.Contains(oUsuario.loginn) select u;
                    general = general.Intersect(log);
                }
                if (oUsuario.rol != "")
                {
                    IQueryable<usuario> ro = from u in oCon.usuario where u.rol.Contains(oUsuario.rol) select u;
                    general = general.Intersect(ro);
                }
                if (oUsuario.id_familia != 0)
                {
                    IQueryable<usuario> fami = from u in oCon.usuario where u.id_familia == oUsuario.id_familia select u;
                    general = general.Intersect(fami);
                }
                return general.ToList();
            }

        }
        public usuario Logg (usuario oUsuario)
        {
            using (ProyectoCIFP oCon = new ProyectoCIFP())
            {                        
                int i = (from u in oCon.usuario 
                                         where u.loginn == oUsuario.loginn & u.pass == oUsuario.pass
                                         select u).Count();
                usuario user = null;
                if (i != 0)
                {
                    user = (from u in oCon.usuario
                            where u.loginn == oUsuario.loginn & u.pass == oUsuario.pass
                            select u).First();
                }
                return user;
                
            }

        }
       


        #endregion 
        #region Procesos privados
        #endregion
    }
}
